ν νλ¦Ώ κΈ°λ° νλ‘ νΈμλ μ½λ μμ±μ κ°λ ₯ν¨μ μ΄ν΄λ³΄μΈμ. ν¨μ¨μ±μ λμ΄κ³ , μΌκ΄μ±μ 보μ₯νλ©°, κΈλ‘λ² νμ μν κ°λ° μν¬νλ‘μ°λ₯Ό κ°μννλ λ°©λ²μ μμ보μΈμ.
νλ‘ νΈμλ μ½λ μμ±: ν νλ¦Ώ κΈ°λ° μ κ·Ό λ°©μμΌλ‘ κ°λ° μλ ν₯μ
μλμ μΈ νλ‘ νΈμλ κ°λ° μΈκ³μμ ν¨μ¨μ±κ³Ό μλλ λ§€μ° μ€μν©λλ€. μΈλ ¨λκ³ μνΈ μμ©μ μΈ μΈν°νμ΄μ€μ λν μ¬μ©μ κΈ°λμΉκ° κ³μ λμμ§μ λ°λΌ κ°λ° νμ μν¬νλ‘μ°λ₯Ό κ°μνν μ μλ νμ μ μΈ λ°©λ²μ λμμμ΄ λͺ¨μνκ³ μμ΅λλ€. ν° μΈκΈ°λ₯Ό μ»κ³ μλ κ°λ ₯ν μ λ΅ μ€ νλλ νλ‘ νΈμλ μ½λ μμ±, νΉν ν νλ¦Ώ κΈ°λ° κ°λ°μ μ΄μ©νλ κ²μ λλ€. μ΄ μ κ·Ό λ°©μμ μ¬μ μ μλ ꡬ쑰μ ν¨ν΄μ νμ©νμ¬ λ°λ³΅μ μ΄κ±°λ 보μΌλ¬νλ μ΄νΈ μ½λμ μμ±μ μλννμ¬ κ°λ°μκ° νμν μ¬μ©μ κ²½νμ ꡬμΆνλ λ° λμ± λ³΅μ‘νκ³ μ°½μμ μΈ μΈ‘λ©΄μ μ§μ€ν μ μλλ‘ ν©λλ€.
κΈλ‘λ² κ°λ°μλ€μκ² ν νλ¦Ώ κΈ°λ° μ½λ μμ±μ μ΄ν΄νκ³ κ΅¬ννλ κ²μ μ§λ¦¬μ μμΉλ κ°λ³ μ½λ© μ€νμΌμ κ΄κ³μμ΄ λ€μν νκ³Ό νλ‘μ νΈμμ μΌκ΄μ±μ μ‘°μ±νμ¬ νλλ₯Ό λ°κΏ μ μμ΅λλ€.
νλ‘ νΈμλ μ½λ μμ±μ΄λ 무μμΈκ°?
ν΅μ¬μ μΌλ‘ νλ‘ νΈμλ μ½λ μμ±μλ μ¬μ μ μλ ν νλ¦Ώ λ° μ λ ₯ λ§€κ°λ³μ μ§ν©μ κΈ°λ°μΌλ‘ μμ€ μ½λλ₯Ό μλμΌλ‘ μμ±νκΈ° μν΄ λꡬ λλ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ κ²μ΄ ν¬ν¨λ©λλ€. μλμΌλ‘ λ°λ³΅μ μΈ μ½λ ꡬ쑰λ₯Ό μμ±νλ λμ κ°λ°μλ μνλ μΆλ ₯μ μ€λͺ νλ ν νλ¦Ώμ μ μν μ μμΌλ©°, μμ± λꡬλ νΉμ λ°μ΄ν° λλ ꡬμ±μΌλ‘ μ΄λ₯Ό μ±μλλ€. μ΄λ νΉν λ€μμ μ μ©ν©λλ€.
- 보μΌλ¬νλ μ΄νΈ μ½λ: μΌλ°μ μΈ νμΌ κ΅¬μ‘°, μ»΄ν¬λνΈ μ€μ λλ κ΅¬μ± νμΌ μμ±.
- λ°μ΄ν° κΈ°λ° UI: λ°μ΄ν° μ€ν€λ§ λλ API μλ΅μμ μ§μ μ¬μ©μ μΈν°νμ΄μ€ μμ λ§λ€κΈ°.
- μ»΄ν¬λνΈ λ³ν: μλ‘ λ€λ₯Έ κ΅¬μ± λλ μνλ₯Ό κ°μ§ UI μ»΄ν¬λνΈμ μ¬λ¬ λ²μ μμ±.
- CRUD μμ : κΈ°λ³Έ μμ±, μ½κΈ°, μ λ°μ΄νΈ λ° μμ μΈν°νμ΄μ€ μλν.
ν νλ¦Ώ κΈ°λ° κ°λ°μ λΆμ
ν νλ¦Ώ κΈ°λ° κ°λ°μ μ½λ μμ±μ νΉμ νκ³ λ§€μ° ν¨κ³Όμ μΈ ννμ λλ€. μ¬κΈ°μλ ν¬ν¨ν νΉμ λ°μ΄ν° λλ μ²λ¦¬ν λ°μ΄ν°μ λ³λλ‘ μ½λμ ꡬ쑰μ λ μ΄μμμ λΆλ¦¬νλ μμΉμ΄ μ μ©λ©λλ€. κ°λ°μλ₯Ό μν λ©μΌ λ³ν©μ΄λΌκ³ μκ°νμμμ€.
ν νλ¦Ώμ μ½λμ μ μ λΆλΆ(HTML ꡬ쑰, κΈ°λ³Έ CSS μ νκΈ°, μ»΄ν¬λνΈ μλͺ μ£ΌκΈ° λ©μλ λλ API νΈμΆ ꡬ쑰)μ μ μν©λλ€. μ΄ ν νλ¦Ώ λ΄μ λ³μ λλ μ리 νμμλ νΉμ κ° λλ λμ λ°μ΄ν°λ‘ μ±μμ Έ νΉμ μꡬ μ¬νμ λ§κ² μ‘°μ λ μμ ν μ½λ μ‘°κ°μ μμ±ν©λλ€.
μ΄ λ°©λ²λ‘ μ μννΈμ¨μ΄ κ°λ°μ κΈ°λ³Έ μμΉμΈ DRY(Don't Repeat Yourself) μμ΄λμ΄μ κΉμ΄ λΏλ¦¬λ₯Ό λκ³ μμ΅λλ€. μ¬μ¬μ© κ°λ₯ν ν νλ¦Ώμ μμ±ν¨μΌλ‘μ¨ κ°λ°μλ μ€λ³΅ μ½λ©μ λ°©μ§νμ¬ μ€λ₯ λ°μ κ°λ₯μ±μ μ€μ΄κ³ μ μ§ κ΄λ¦¬μ±μ κ°μ ν©λλ€.
ν νλ¦Ώ κΈ°λ° νλ‘ νΈμλ μ½λ μμ±μ μ£Όμ μ΄μ
ν νλ¦Ώ κΈ°λ° μ κ·Ό λ°©μμ νλ‘ νΈμλ μ½λ μμ±μ μ±ννλ©΄ νΉν κ΅μ κ°λ° νμκ² μλ§μ μ΄μ μ΄ μμ΅λλ€.
- κ°λ° μλ ν₯μ: μΌλ°μ μΈ μ½λ ν¨ν΄μ μμ±μ μλννλ©΄ κ°λ° μκ°μ΄ ν¬κ² λ¨μΆλ©λλ€. λ°λ³΅μ μΈ μ½λ μ€μ μμ±νλ λμ κ°λ°μλ λ¨μΌ λͺ λ ΉμΌλ‘ μ 체 μ»΄ν¬λνΈ λλ λͺ¨λμ μμ±ν μ μμ΅λλ€. μ΄λ μ΄λ°ν λ§κ°μΌμ λ§μΆκ³ κ²½μμ μΈ κΈλ‘λ² μμ₯μμ μ ν μΆμλ₯Ό κ°μννλ λ° λ§€μ° μ€μν©λλ€.
- ν₯μλ μΌκ΄μ± λ° νμ€ν: ν νλ¦Ώμ μ 체 νλ‘μ νΈ λλ μ‘°μ§μμ μΌκ΄λ μ½λ© μ€νμΌ, ꡬ쑰 λ° λͺ¨λ² μ¬λ‘ μ€μλ₯Ό κ°μ ν©λλ€. μ΄λ ν΅μΌμ±μ μ μ§νλ κ²μ΄ μ΄λ €μΈ μ μλ ν¬κ³ λΆμ°λ νμ λ§€μ° μ€μν©λλ€. μμΉλ λ°°κ²½μ κ΄κ³μμ΄ λͺ¨λ κ°λ°μκ° λμΌν ν립λ ν¨ν΄μΌλ‘ μμ νλλ‘ λ³΄μ₯ν©λλ€.
- μ€λ₯ λ° λ²κ·Έ κ°μ: 보μΌλ¬νλ μ΄νΈ μ½λλ₯Ό μλμΌλ‘ μμ±νλ©΄ μ€ν λ° λ Όλ¦¬μ μ€λ₯κ° λ°μνκΈ° μ½μ΅λλ€. μ λ’°ν μ μλ ν νλ¦Ώμμ μ½λλ₯Ό μμ±νλ©΄ μ΄λ¬ν λ²κ·Έκ° λ°μν μνμ΄ ν¬κ² μ€μ΄λλλ€. μ΄λ λ μμ μ μ΄κ³ μ λ’°ν μ μλ μ ν리μΌμ΄μ μΌλ‘ μ΄μ΄μ§λλ€.
- μ μ§ κ΄λ¦¬μ± ν₯μ: μ½λκ° ν νλ¦Ώμμ μμ±λ λ μΌλ°μ μΈ ν¨ν΄μ λν μ λ°μ΄νΈ λλ λ³κ²½ μ¬νμ ν νλ¦Ώ μ체μμ λ§λ€ μ μμ΅λλ€. μ½λλ₯Ό λ€μ μμ±νλ©΄ μ΄λ¬ν λ³κ²½ μ¬νμ΄ λͺ¨λ μΈμ€ν΄μ€μ μ νλλ―λ‘ μ¬λ¬ νμΌμμ μλ 리ν©ν°λ§νλ κ²λ³΄λ€ μ μ§ κ΄λ¦¬κ° ν¨μ¬ ν¨μ¨μ μ λλ€.
- νλ‘ν νμ΄ν κ°μν: λΉ λ₯Έ νλ‘ν νμ΄ν λ° MVP(Minimum Viable Product) κ°λ°μ μν΄ ν νλ¦Ώ κΈ°λ° μμ±μ νμ΄ κΈ°λ₯μ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λΉ λ₯΄κ² 쑰립ν μ μλλ‘ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ μΈκ³μ μ΄ν΄ κ΄κ³μμ μμ΄λμ΄λ₯Ό λ 빨리 λ°λ³΅νκ³ κ²μ¦ν μ μμ΅λλ€.
- μλ‘μ΄ κ°λ°μλ₯Ό μν μ¨λ³΄λ© κ°μ : μλ‘μ΄ ν ꡬμ±μμ ν립λ ν νλ¦Ώ λ° μμ± νλ‘μΈμ€λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨ λΉ λ₯΄κ² μ μν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νμ΅ κ³‘μ μ΄ μ€μ΄λ€κ³ νΉμ νλ‘μ νΈ μ½λλ² μ΄μ€μ λν μ΄μ κ²½νμ κ΄κ³μμ΄ μ²«λ λΆν° μλ―Έ μκ² κΈ°μ¬ν μ μμ΅λλ€.
- 볡μ‘ν μν€ν μ² μ΄μ§: 볡μ‘ν μ»΄ν¬λνΈ κ³μΈ΅ ꡬ쑰 λλ λ°μ΄ν° λͺ¨λΈμ κ°μ§ νλ‘μ νΈμ κ²½μ° ν νλ¦Ώμ΄ νμν μ€μΊν΄λ©κ³Ό μνΈ μ°κ²°μ μλμΌλ‘ μμ±νμ¬ λ³΅μ‘μ±μ κ΄λ¦¬νλ λ° λμμ΄ λ μ μμ΅λλ€.
ν νλ¦Ώ κΈ°λ° νλ‘ νΈμλ μ½λ μμ±μ μΌλ°μ μΈ μ¬μ© μ¬λ‘
ν νλ¦Ώ κΈ°λ° μ½λ μμ±μ λ€μνλ©° κ΄λ²μν νλ‘ νΈμλ κ°λ° μμ μ μ μ©ν μ μμ΅λλ€. λ€μμ κ°μ₯ μΌλ°μ μ΄κ³ μν₯λ ₯ μλ μ¬μ© μ¬λ‘ μ€ μΌλΆμ λλ€.
1. UI μ»΄ν¬λνΈ μμ±
μ΄κ²μ μλ§λ κ°μ₯ λ리 μ¬μ©λλ μ ν리μΌμ΄μ μΌ κ²μ λλ€. κ°λ°μλ λ²νΌ, μ λ ₯ νλ, μΉ΄λ, λͺ¨λ¬, νμ λͺ¨μ λ±κ³Ό κ°μ μΌλ°μ μΈ UI μμμ λν ν νλ¦Ώμ λ§λ€ μ μμ΅λλ€. μ΄λ¬ν ν νλ¦Ώμ ν μ€νΈ λ΄μ©, μμ, μ΄λ²€νΈ νΈλ€λ¬ λ° νΉμ μν(μ: λΉνμ±νλ¨, λ‘λ©)μ κ°μ propsλ₯Ό νμ©νλλ‘ λ§€κ°λ³μνν μ μμ΅λλ€.
μ: μ¬μ¬μ© κ°λ₯ν "μΉ΄λ" μ»΄ν¬λνΈμ λν ν νλ¦Ώμ μκ°ν΄ 보μμμ€. ν νλ¦Ώμ κΈ°λ³Έ HTML ꡬ쑰, μΌλ°μ μΈ CSS ν΄λμ€ λ° μ΄λ―Έμ§, μ λͺ©, μ€λͺ λ° μμ μ λν μ¬λ‘―μ μ μν μ μμ΅λλ€. κ·Έλ¬λ©΄ κ°λ°μλ κ° μ¬λ‘―μ λν νΉμ λ°μ΄ν°λ₯Ό μ 곡νμ¬ "ProductCard"λ₯Ό μμ±ν μ μμ΅λλ€.
ν νλ¦Ώ(κ°λ μ ):
<div class="card">
<img src="{{imageUrl}}" alt="{{imageAlt}}" class="card-image"/>
<div class="card-content">
<h3 class="card-title">{{title}}</h3>
<p class="card-description">{{description}}</p>
<div class="card-actions">
{{actions}}
</div>
</div>
</div>
μμ± μ λ ₯:
{
"imageUrl": "/images/product1.jpg",
"imageAlt": "Product 1",
"title": "Premium Widget",
"description": "A high-quality widget for all your needs.",
"actions": "<button>Add to Cart</button>"
}
κ·Έλ¬λ©΄ ν΅ν©ν μ€λΉκ° λ μμ ν "ProductCard" μ»΄ν¬λνΈκ° μμ±λ©λλ€.
2. μμ μμ±
μ¬λ¬ μ λ ₯ νλ, μ ν¨μ± κ²μ¬ κ·μΉ λ° μ μΆ λ‘μ§μ μ¬μ©νμ¬ μμμ λ§λλ κ²μ μ§λ£¨ν μ μμ΅λλ€. ν νλ¦Ώ κΈ°λ° μμ±μ νλ μ€ν€λ§(μ: μ΄λ¦, μ΄λ©μΌ, λΉλ°λ²νΈ, μ ν¨μ± κ²μ¬ κ·μΉ ν¬ν¨)λ₯Ό κ°μ Έμ ν΄λΉ HTML μμ μμ, μ λ ₯ μν λ° κΈ°λ³Έ μ ν¨μ± κ²μ¬ λ‘μ§μ μμ±νμ¬ μ΄λ₯Ό μλνν μ μμ΅λλ€.
μ: μ¬μ©μ νλ‘ν νλλ₯Ό μ μνλ JSON μ€ν€λ§:
[
{ "name": "firstName", "label": "First Name", "type": "text", "required": true },
{ "name": "email", "label": "Email Address", "type": "email", "required": true, "validation": "email" },
{ "name": "age", "label": "Age", "type": "number", "min": 18 }
]
κ·Έλ° λ€μ ν νλ¦Ώμ μ΄ μ€ν€λ§λ₯Ό μ¬μ©νμ¬ λ€μμ μμ±ν μ μμ΅λλ€.
<div class="form-group">
<label for="firstName">First Name*</label>
<input type="text" id="firstName" name="firstName" required/>
</div>
<div class="form-group">
<label for="email">Email Address*</label>
<input type="email" id="email" name="email" required/>
</div>
<div class="form-group">
<label for="age">Age</label>
<input type="number" id="age" name="age" min="18"/>
</div>
3. API ν΄λΌμ΄μΈνΈ λ° λ°μ΄ν° νμΉ λ‘μ§
RESTful API λλ GraphQL μλν¬μΈνΈλ₯Ό μ¬μ©ν λ κ°λ°μλ μ’ μ’ μμ²μ νκ³ , μλ΅μ μ²λ¦¬νκ³ , λ‘λ©/μ€λ₯ μνλ₯Ό κ΄λ¦¬νκΈ° μν΄ μ μ¬ν μ½λλ₯Ό μμ±ν©λλ€. ν νλ¦Ώμ API μλν¬μΈνΈ μ μ λλ GraphQL μ€ν€λ§λ₯Ό κΈ°λ°μΌλ‘ λ°μ΄ν°λ₯Ό νμΉνκΈ° μν ν¨μλ₯Ό μμ±ν μ μμ΅λλ€.
μ: `/api/users/{id}`μ κ°μ REST API μλν¬μΈνΈμ κ²½μ° ν νλ¦Ώμ JavaScript ν¨μλ₯Ό μμ±ν μ μμ΅λλ€.
async function getUserById(id) {
try {
const response = await fetch(`/api/users/${id}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error("Error fetching user:", error);
throw error;
}
}
OpenAPI μ¬μ λλ μ μ¬ν API μ μ λ¬Έμλ₯Ό κΈ°λ°μΌλ‘ μ 체 API μλΉμ€ λͺ¨λμ μμ±νλλ‘ μΆκ°λ‘ μΆμνν μ μμ΅λλ€.
4. λΌμ°ν λ° νμ μ€μ
SPA(Single Page Application)μ κ²½μ° κ²½λ‘ μ€μ μ μννλ©΄ λ°λ³΅μ μΈ κ΅¬μ±μ΄ νμν μ μμ΅λλ€. ν νλ¦Ώμ React Router λλ Vue Routerμ κ°μ νλ μμν¬μ λν κ²½λ‘ μ μλ₯Ό νμ΄μ§ λͺ©λ‘κ³Ό ν΄λΉ μ»΄ν¬λνΈλ₯Ό κΈ°λ°μΌλ‘ μμ±ν μ μμ΅λλ€.
5. νλ‘μ νΈ μ€μΊν΄λ© λ° λ³΄μΌλ¬νλ μ΄νΈ
μλ‘μ΄ νλ‘μ νΈλ₯Ό μμνκ±°λ μλ‘μ΄ κΈ°λ₯ λͺ¨λμ μΆκ°ν λ μ’ μ’ νμν νμ€ νμΌ λ° λλ ν 리 μ§ν©μ΄ μμ΅λλ€(μ: μ»΄ν¬λνΈ νμΌ, ν μ€νΈ νμΌ, CSS λͺ¨λ, Storybook ꡬμ±). μ½λ μμ± λꡬλ μ΄ μ΄κΈ° ꡬ쑰λ₯Ό μλμΌλ‘ μμ±νμ¬ μλΉν μ€μ μκ°μ μ μ½ν μ μμ΅λλ€.
ν νλ¦Ώ κΈ°λ° μ½λ μμ±μ μν λꡬ λ° κΈ°μ
ν νλ¦Ώ κΈ°λ° νλ‘ νΈμλ μ½λ μμ±μ μ©μ΄νκ² νκΈ° μν΄ λ€μν λꡬ λ° λΌμ΄λΈλ¬λ¦¬κ° μ‘΄μ¬νλ©°, λ€μν μꡬ μ¬νκ³Ό κΈ°λ³Έ μ€μ μ μΆ©μ‘±ν©λλ€. λͺ κ°μ§ μ£Όμ μλ λ€μκ³Ό κ°μ΅λλ€.
- Yeoman: νλ‘μ νΈ κ΅¬μ‘° λ° νμΌμ λ§λ€κΈ° μν΄ μμ±κΈ°(Node.jsλ‘ κ΅¬μΆ)λ₯Ό μ¬μ©νλ μΈκΈ° μλ μ€μΊν΄λ© λꡬμ λλ€. κ°λ°μλ νΉμ μꡬ μ¬νμ λ§κ² μ¬μ©μ μ§μ Yeoman μμ±κΈ°λ₯Ό λ§λ€ μ μμ΅λλ€.
- Plop: νλ°νΈ μλ μ€λν« λ° λ³΄μΌλ¬νλ μ΄νΈλ₯Ό μ½κ² λ§λ€ μ μλ λ§μ΄ν¬λ‘ μμ±κΈ° νλ μμν¬μ λλ€. μ»΄ν¬λνΈ λλ λͺ¨λμ μμ±νλ λ° μμ£Ό μ¬μ©λλ λ¨μμ±κ³Ό μ μ°μ±μΌλ‘ μ λͺ ν©λλ€.
- Hygen: μ½λ μμ± ν νλ¦Ώμ μ½κ² ꡬμ±, μ¬μ¬μ© λ° κ³΅μ ν μ μκ² ν΄μ£Όλ μ½λ μμ±κΈ°μ λλ€. λ§€μ° κ΅¬μ± κ°λ₯νλ©° 볡μ‘ν μμ± μμ μ μ²λ¦¬ν μ μμ΅λλ€.
- μ¬μ©μ μ§μ μ€ν¬λ¦½νΈ(μ: Node.js, Python): λ§€μ° κ΅¬μ²΄μ μ΄κ±°λ ν΅ν©λ μν¬νλ‘μ°μ κ²½μ° κ°λ°μλ Node.js(Handlebars λλ EJSμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ ν νλ¦Ώ μμ±) λλ Pythonκ³Ό κ°μ μΈμ΄λ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ§μ μ€ν¬λ¦½νΈλ₯Ό μμ±ν μ μμ΅λλ€. μ΄λ κ² νλ©΄ μ΅λ μ μ΄κ° κ°λ₯νμ§λ§ μμ± μμ€ν μ체μ λ λ§μ κ°λ° λ Έλ ₯μ΄ νμν©λλ€.
- νλ μμν¬λ³ CLI: λ§μ νλ‘ νΈμλ νλ μμν¬λ μ½λ μμ± κΈ°λ₯μ΄ ν¬ν¨λ μ체 CLI(Command-Line Interface)μ ν¨κ» μ 곡λ©λλ€. μλ₯Ό λ€μ΄ Angular CLI(`ng generate component`, `ng generate service`) λ° Create React App(μμ±μ λ μ§μ€νμ§λ§ κ²¬κ³ ν κΈ°λ° μ 곡)μ μΌλ°μ μΈ κ΅¬μ‘°λ₯Ό λΆνΈμ€νΈλ©νλ λ°©λ²μ μ 곡ν©λλ€. Vue CLIλ μ»΄ν¬λνΈ λ° νλ‘μ νΈμ λν μμ±κΈ°λ μ 곡ν©λλ€.
- API μ¬μ λꡬ(μ: OpenAPI Generator, GraphQL Code Generator): μ΄λ¬ν λꡬλ API μ¬μμμ μ§μ ν΄λΌμ΄μΈνΈ μΈ‘ μ½λ(API μλΉμ€ κΈ°λ₯ λλ λ°μ΄ν° μ νκ³Ό κ°μ)λ₯Ό μμ±νμ¬ λ°±μλ μλΉμ€μ ν΅ν©νλ μλμ μΈ λ Έλ ₯μ λν μ€μΌ μ μμ΅λλ€.
ν νλ¦Ώ κΈ°λ° μ½λ μμ± κ΅¬νμ μν λͺ¨λ² μ¬λ‘
μ΄μ μ κ·Ήλννκ³ μ μ¬μ μΈ ν¨μ μ λ°©μ§νλ €λ©΄ ν νλ¦Ώ κΈ°λ° μ½λ μμ±μ ꡬνν λ μ λ΅μ μ κ·Ό λ°©μμ μ±ννλ κ²μ΄ νμμ μ λλ€. λ€μμ λͺ κ°μ§ λͺ¨λ² μ¬λ‘μ λλ€.
1. λͺ ννκ³ μ μ μλ ν νλ¦ΏμΌλ‘ μμν©λλ€.
κ°λ ₯νκ³ μ μ°ν ν νλ¦Ώμ λ§λλ λ° μκ°μ ν¬μνμμμ€. λ€μμ νμΈνμμμ€.
- λ§€κ°λ³μν κ°λ₯: λ€μν μΆλ ₯μ μμ±νκΈ° μν΄ λ€μν μ λ ₯μ μλ½νλλ‘ ν νλ¦Ώμ μ€κ³ν©λλ€.
- μ μ§ κ΄λ¦¬ κ°λ₯: ν νλ¦Ώμ κΉ¨λνκ³ μ μ 리λμ΄ μμΌλ©° μ΄ν΄νκΈ° μ½κ² μ μ§ν©λλ€.
- λ²μ κ΄λ¦¬: λ³κ²½ μ¬νμ μΆμ νκ³ ν¨κ³Όμ μΌλ‘ νμ νκΈ° μν΄ λ²μ κ΄λ¦¬ μμ€ν μ ν νλ¦Ώμ μ μ₯ν©λλ€.
2. ν νλ¦Ώμ μ§μ€μ μ΄κ³ λͺ¨λνλ μνλ‘ μ μ§ν©λλ€.
λ무 λ§μ μμ μ μννλ €λ λͺ¨λ리μ ν νλ¦Ώμ λ§λ€μ§ λ§μμμ€. 볡μ‘ν μμ± μμ μ κ²°ν©νκ±°λ μ¬μ¬μ©ν μ μλ λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ ν νλ¦ΏμΌλ‘ λλμμμ€.
3. λΉλ νλ‘μΈμ€μ ν΅ν©ν©λλ€.
λΉλ νμ΄νλΌμΈ λλ κ°λ° μ€ν¬λ¦½νΈμ ν΅ν©νμ¬ μμ± νλ‘μΈμ€λ₯Ό μλνν©λλ€. μ΄λ κ² νλ©΄ κ°λ° λλ λ°°ν¬ μ€μ μλ κ°μ μμ΄ μ½λκ° νμμ λ°λΌ μμ± λλ μ λ°μ΄νΈλ©λλ€.
4. ν νλ¦Ώ λ° μμ± νλ‘μΈμ€ λ¬Έμν
λͺ νν λ¬Έμλ νΉν κΈλ‘λ² νμ μ€μν©λλ€. λ€μμ μ€λͺ νμμμ€.
- κ° ν νλ¦Ώμ΄ μμ±νλ νλͺ©.
- κ° ν νλ¦Ώμ΄ νμ©νλ λ§€κ°λ³μ.
- μμ± λꡬ μ¬μ© λ°©λ².
- ν νλ¦Ώμ΄ μ μ₯λλ μμΉ.
5. μμ±λ μ½λλ₯Ό μ£Όμν΄μ μ²λ¦¬ν©λλ€.
ν νλ¦Ώμμ μμ±λ μ½λλ μΌλ°μ μΌλ‘ μλμΌλ‘ νΈμ§νκΈ° μν κ²μ΄ μλμ μ΄ν΄νμμμ€. ꡬ쑰 λλ λ Όλ¦¬λ₯Ό λ³κ²½ν΄μΌ νλ κ²½μ° ν νλ¦Ώμ μμ νκ³ μ½λλ₯Ό λ€μ μμ±ν΄μΌ ν©λλ€. μΌλΆ λꡬλ μμ±λ μ½λλ₯Ό "ν¨μΉ"νκ±°λ νμ₯ν μ μμ§λ§ μ΄λ‘ μΈν΄ 볡μ‘μ±μ΄ μΆκ°λ μ μμ΅λλ€.
6. κ±°λ²λμ€ λ° μμ κΆ μ€μ
ν νλ¦Ώ μμ±, μ μ§ κ΄λ¦¬ λ° μ λ°μ΄νΈλ₯Ό λ΄λΉνλ μ¬λμ μ μν©λλ€. μ΄λ κ² νλ©΄ μ½λ μμ± μμ€ν μ΄ κ°λ ₯νκ² μ μ§λκ³ νλ‘μ νΈ μꡬ μ¬νμ λ§μΆ°μ§λλ€.
7. μμ μ μ ν©ν λꡬλ₯Ό μ νν©λλ€.
νλ‘μ νΈμ 볡μ‘μ±, νμ λꡬ μ¬μ© μλ ¨λ λ° ν΅ν© μꡬ μ¬νμ λ°λΌ μ¬μ© κ°λ₯ν λꡬλ₯Ό νκ°ν©λλ€. κΈ°λ³Έ μ»΄ν¬λνΈ μμ±μλ κ°λ¨ν λꡬ면 μΆ©λΆνμ§λ§ 볡μ‘ν μ€μΊν΄λ©μλ λ κ°λ ₯ν νλ μμν¬κ° νμν μ μμ΅λλ€.
8. νμΌλΏ λ° λ°λ³΅
μ 체 μ‘°μ§ λλ λκ·λͺ¨ νλ‘μ νΈμ μ½λ μμ± μμ€ν μ λ°°ν¬νκΈ° μ μ λ μμ ν λλ νΉμ κΈ°λ₯μ μ¬μ©νμ¬ νμΌλΏ νλ‘κ·Έλ¨μ κ³ λ €ν©λλ€. μ€μ μ¬μ©μ κΈ°λ°μΌλ‘ νΌλλ°±μ μμ§νκ³ ν νλ¦Ώκ³Ό νλ‘μΈμ€λ₯Ό λ°λ³΅ν©λλ€.
λ¬Έμ μ λ° κ³ λ € μ¬ν
ν νλ¦Ώ κΈ°λ° μ½λ μμ±μ΄ μλΉν μ΄μ μ μ 곡νλ λ°λ©΄ μ μ¬μ μΈ κ³Όμ λ₯Ό μΈμνλ κ²μ΄ μ€μν©λλ€.
- κ³Όλν μμ‘΄ λ° μΆμν λμΆ: ν νλ¦Ώμ΄ μ λλ‘ μ€κ³λμ§ μμ κ²½μ° κ°λ°μλ μ΄μ μ§λμΉκ² μμ‘΄νκ² λκ³ μμ±λ ꡬ쑰μμ λ²μ΄λμΌ ν λ μ΄λ €μμ κ²ͺμ μ μμ΅λλ€. μ΄λ κΈ°λ³Έ ν νλ¦Ώμ 볡μ‘μ±μ΄ λΆλͺ ν΄μ§κ³ λ¬Έμ κ° λ°μνλ "μΆμν λμΆ"λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- ν νλ¦Ώ 볡μ‘μ±: μ κ΅ν ν νλ¦Ώμ μμ±νκ³ μ μ§ κ΄λ¦¬νλ κ²μ μ체μ μΈ κΈ°μ λ° λꡬ μΈνΈκ° νμν 볡μ‘ν κ°λ° μμ μ΄ λ μ μμ΅λλ€.
- λꡬ μ€λ²ν€λ: μλ‘μ΄ λꡬ λ° μν¬νλ‘μ°λ₯Ό λμ νλ €λ©΄ κ΅μ‘κ³Ό μ μμ΄ νμνλ―λ‘ μ²μμ μΌλΆ ν ꡬμ±μμ μλκ° λλ €μ§ μ μμ΅λλ€.
- μ¬μ©μ μ§μ μ ν: μΌλΆ ν νλ¦Ώμ λ무 μ격νμ¬ μλ νΈμ§μ μμ‘΄νμ§ μκ³ κ³ μ ν μꡬ μ¬νμ λ§κ² μμ±λ μ½λλ₯Ό μ¬μ©μ μ§μ νκΈ°κ° μ΄λ ΅μ΅λλ€.
- μμ±λ μ½λ λλ²κΉ : μλ μμ±λ μ½λ λ΄μ λ¬Έμ μ μ λλ²κΉ νλ κ²μ νΉν μμ± νλ‘μΈμ€ μμ²΄κ° λ³΅μ‘ν κ²½μ° μλμΌλ‘ μμ±λ μ½λλ₯Ό λλ²κΉ νλ κ²λ³΄λ€ λ μ΄λ €μΈ μ μμ΅λλ€.
κΈλ‘λ² ν κ³ λ € μ¬ν
κ΅μ κ°λ° νμ κ²½μ° ν νλ¦Ώ κΈ°λ° μ½λ μμ±μ νΉν μ μ΅ν μ μμ§λ§ νΉμ κ³ λ € μ¬νλ λμ ν©λλ€.
- μΈμ΄ λ° νμ§ν: ν νλ¦Ώμ΄ λ²μλ λ¬Έμμ΄ λλ λ‘μΊλ³ νμκ³Ό κ°μ κ΅μ ν(i18n) λ° νμ§ν(l10n) μꡬ μ¬νμ μμ©ν μ μλμ§ νμΈν©λλ€.
- μκ°λ λ° νμ : μ€μ μ§μ€μ, λ²μ κ΄λ¦¬ ν νλ¦Ώμ μλ‘ λ€λ₯Έ μκ°λμ κ±Έμ³ μΌκ΄λ κ°λ°μ μ©μ΄νκ² ν©λλ€. λͺ νν λ¬Έμλ λ€μν μ§μμ κ°λ°μκ° μμ±λ μ½λλ₯Ό μ½κ² μ΄ν΄νκ³ μ¬μ©ν μ μλλ‘ λ³΄μ₯ν©λλ€.
- λ¬Ένμ λμμ€: μ½λ μμ±μ μΌλ°μ μΌλ‘ κΈ°μ μ μ΄μ§λ§, ν νλ¦Ώ λ΄μμ μ¬μ©λκ±°λ μ¬μ©μ μλ΄νλ λͺ¨λ μ λλ λ¬Έμκ° λ¬Ένμ μΌλ‘ λ―Όκ°νκ³ ν¬κ΄μ μΈμ§ νμΈν©λλ€.
- λꡬ μ κ·Όμ±: μ νν μ½λ μμ± λκ΅¬κ° μλ‘ λ€λ₯Έ μ§μμ νμμ μ¬μ©νλ κ°λ° νκ²½κ³Ό νΈνλλμ§ νμΈν©λλ€.
κ²°λ‘
νλ‘ νΈμλ μ½λ μμ±, νΉν ν νλ¦Ώ κΈ°λ° κ°λ°μ ν΅ν΄ κ°λ°μ μμ°μ±μ ν₯μμν€κ³ , μ½λ νμ§μ 보μ₯νλ©°, μ΅μ μΉ μ ν리μΌμ΄μ μ μ 곡μ κ°μννλ κ°λ ₯ν μ λ΅μ λλ€. λ°λ³΅μ μΈ μμ μ μλννκ³ μΌκ΄μ±μ μ μ©ν¨μΌλ‘μ¨ νμ νμ μ μ§μ€νκ³ μ§μ μΌλ‘ μν₯λ ₯ μλ μ¬μ©μ κ²½νμ μ°½μΆν μ μμ΅λλ€.
μννΈμ¨μ΄ κ°λ° νκ²½μ΄ κ³μ λ°μ ν¨μ λ°λΌ μ΄λ¬ν μλν κΈ°μ μ μμ©νλ κ²μ νΉν μμ§λ ₯ μκ³ κ³ μ±λ₯μ κ°λ° νκ²½μ μν΄ λ Έλ ₯νλ κΈλ‘λ² νμ κ²½μ° κ²½μλ ₯μ μ μ§νκ³ κ³ νμ§ μ νμ ν¨μ¨μ μΌλ‘ μ 곡νλ λ° μ μ λ μ€μν΄μ§ κ²μ λλ€. μ λ§λ€μ΄μ§ ν νλ¦Ώκ³Ό κ°λ ₯ν μμ± νλ‘μΈμ€μ ν¬μνλ κ²μ νλ‘ νΈμλ κ°λ° λ Έλ ₯μ λ―Έλ ν¨μ¨μ±κ³Ό νμ₯μ±μ λν ν¬μμ λλ€.
μ€ν κ°λ₯ν ν΅μ°°λ ₯:
- νμ¬ νλ‘μ νΈμμ λ°λ³΅μ μΈ μ½λ ν¨ν΄μ μλ³ν©λλ€.
- μ½λ μμ±μ μ€ννκΈ° μν΄ Yeoman, Plop λλ Hygenκ³Ό κ°μ λꡬλ₯Ό νμν©λλ€.
- κ°μ₯ μΌλ°μ μΈ UI μ»΄ν¬λνΈ λλ 보μΌλ¬νλ μ΄νΈ ꡬ쑰μ λν ν νλ¦Ώμ μμ±νμ¬ μμν©λλ€.
- ν νλ¦Ώμ μ² μ ν λ¬Έμννκ³ μ 체 νμ΄ μ‘μΈμ€ν μ μλλ‘ ν©λλ€.
- μ½λ μμ±μ νμ νμ€ κ°λ° μν¬νλ‘μ°μ ν΅ν©ν©λλ€.
ν νλ¦Ώ κΈ°λ° μ½λ μμ±μ μ λ΅μ μΌλ‘ ꡬννλ©΄ νλ‘ νΈμλ κ°λ° μλͺ μ£ΌκΈ°μμ μλΉν κ°μ μ¬νμ νμ©νμ¬ νμ΄ λ λμ μννΈμ¨μ΄λ₯Ό λ λΉ λ₯΄κ² ꡬμΆν μ μμ΅λλ€.